package day7;

import java.util.*;

//作业
public class HomeWork {
    public static void main(String[] args) {
        //demo();
        demo1();
    }
    public static void demo(){
        List<User> list=new ArrayList<>();
        Random r=new Random();
        for(int i=0;i<10;i++){
            String name=getName(r);//随机长度的字母
            String sex=r.nextInt(2)==1?"男":"女";//随机男女
            int age=r.nextInt(100)+1;//随机1-100
            list.add(new User(i+1,name,new UserInfo(i+1,sex,age)));
        }
        Iterator<User> it=list.iterator();
        while (it.hasNext()){
            User u=it.next();
            System.out.println(u);
        }
    }
    public static String getName(Random r){
        StringBuilder sb=new StringBuilder();
        for(int i=0;i<3;i++){
            sb.append((char) (r.nextInt(26)+65));//65-90 A-Z
        }
        return sb.toString();
    }
    public static void demo1(){
        Map<String,Goods> map=new HashMap<>();
        Scanner sc=new Scanner(System.in);
        while(true){
            System.out.println("请输入商品名，esc退出");
            String name=sc.next();
            if("esc".equals(name)) break;//比对输入的信息里面如果包含esc就退出
            System.out.println("购买的数量");
            int num=sc.nextInt();//商品的数量
            double price=0;//定义单价为0
            if(map.containsKey(name)){
                //if判断此时输入的name在之前有没有出现过 如果出现了往下 没出现则执行else语句
                price=map.get(name).price;//从map中获取Goods中的name price
                num=map.get(name).num+num;//此时商品的数量num要增加
            }else{
                //如果之前并没有这个商品则输入单价
                System.out.println("请输入商品的单价");
                price=sc.nextDouble();//输入单价
            }
            map.put(name,new Goods(name,num,price));//将更新的信息存入Map中
        }
        System.out.println("购买结束：清单如下：");
        System.out.println("商品名称\t个数\t总价\t");
        double sum=0;//单独一个用来算商品的总价
        for(String key:map.keySet()){
            //遍历map 获取所有key值的Set集合
            Goods value=map.get(key);//通过get(key)获取Goods中的value key值是唯一的 但是value不是
            //从后面定义可知 value包含了num price name
            sum+=value.num* value.price;//数量*单价 再加上
            System.out.println(key+"\t"+value.num+"\t"+(value.num* value.price));
            //打印key值 String name value中的数量 和 单价
        }
        System.out.println("总价："+sum); //此时在for循环外 打印总价
    }

}

class User{
    int id;
    String name;
    UserInfo userInfo;

    public User(int id, String name, UserInfo userInfo) {
        this.id = id;
        this.name = name;
        this.userInfo = userInfo;
    }

    @Override
    public String toString() {
        String str=id+"\t"+name+"\t"+userInfo.age+"\t"+ userInfo.sex;
        return str;
    }
}
class UserInfo{
    int id;
    String sex;
    int age;

    public UserInfo(int id, String sex, int age) {
        this.id = id;
        this.sex = sex;
        this.age = age;
    }
}
class Goods{//商品对象
    String name;
    Integer num;//数量
    double price;//单价
    public Goods(String name, Integer num, double price) {//有参构造 可以直接用
        this.name = name;
        this.num = num;
        this.price = price;
    }
}